package com.tanglongan.designPattern.dp21_template.demo01;

public abstract class AbstractCourse {

    /**
     * 课程流程：发布预习资料 -→ 制作课件PPT -→ 在线直播 -→ 提交课堂笔记 -→ 提交源码 -→ 布置作业 -→ 检查作业
     */
    public final void createCourse() {
        postPreResource();
        createPPT();
        liveVideo();
        postResource();
        postHomework();

        if (needCheckHomework()) {
            checkHomework();
        }
    }

    protected abstract void checkHomework();

    /**
     * 钩子方法：设计钩子方法的目的是干预执行流程，使得控制行为流程更加灵活。更符合实际业务的要求
     */
    protected boolean needCheckHomework() {
        return false;
    }

    protected void postPreResource() {
        System.out.println("发布预习资料");
    }

    protected void createPPT() {
        System.out.println("制作课件");
    }

    protected void liveVideo() {
        System.out.println("直播授课");
    }

    protected void postResource() {
        System.out.println("上传课后资料");
    }

    protected void postHomework() {
        System.out.println("布置作业");
    }
}
